package co.edu.javeriana.comunicacion;

import co.edu.javeriana.negocio.Estacion;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

public class MCliente extends Thread {
    private int port;
    private String url;
    private Socket s;
    private boolean bConectado;
    Estacion estacion;
    private String nEstacion;

    /**
     * Creates a new instance of MCliente
     */
    public MCliente(int port, String url, String nEstacion, Estacion ventana) {
        this.port = port;
        this.url = url;
        this.estacion = ventana;
        this.nEstacion = nEstacion;
    }

    public void run() {
        try {
            System.out.println("Conectando a "+url+":"+port);
            s = new Socket(url, port);
            DataInputStream dis = new DataInputStream(s.getInputStream());
            enviarTrama(1, nEstacion);
            bConectado = true;
            while (bConectado) {
                int nCodigo = dis.readInt();
                String sTrama = dis.readUTF();
                System.out.println("Recibido: "+sTrama);
                switch (nCodigo) {
                    case 1:
                        //Registrar estacion
                        estacion.addEstacion(sTrama);
                        break;
                    case 2:
                        String[] mensaje = sTrama.split(",");
                        //Otra estacion esta consultando mi temperatura
                        if ("CT".equals(mensaje[0])) {
                            //enviarMensaje("70," + nEstacion + "," + mensaje[1]);
                            estacion.agregarObservador(mensaje[1]);
                        }
                        else if("DT".equals(mensaje[0])) {
                            estacion.eliminarObservador(mensaje[1]);
                        }
                        else{
                            estacion.nuevoDatoRemoto(Double.valueOf(mensaje[0]));
                        }
                        break;
                    case 3:
                        try {
                            estacion.delEstacion(sTrama);
                        } catch (Exception e2) {
                        }
                        break;
                    case 4:
                        estacion.cambiarFrecuencia(Integer.parseInt(sTrama));
                        break;
                }
            }
        } catch (Exception e) {
            System.out.println("No se pudo establecer la conexion");
            e.printStackTrace();
        }
    }

    public void enviarMensaje(String sMensaje) {
        enviarTrama(2, sMensaje);
    }

    public void enviarTrama(int nCodigo, String sTrama) {
        try {
            DataOutputStream dos = new DataOutputStream(s.getOutputStream());
            dos.writeInt(nCodigo);
            dos.writeUTF(sTrama);
        } catch (Exception e) {
            //JOptionPane.showMessageDialog(ventana, "No se pudo enviar el mensaje");
        }

    }
    public void close(){
        try{
            s.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}
